﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace LisaConfigurator
{
    /// <summary>
    /// This interface allows basic access to Lisa's Configuration. Basic Access consists mainly of read-only access to
    /// configuration information such as supplementary Speech recognition and TTS vocabulary.
    /// </summary>
    public interface IConfigurationAccessor
    {
        #region Methods used to access Supplementary Speech Recognition Vocabulary
        
        /// <summary>
        /// Returns the command used to command lisa back into the standby state.
        /// </summary>
        /// <returns></returns>
        List<String> getReturnToStandbyCommands();

        /// <summary>
        /// Returns the command used to grant permission.
        /// </summary>
        /// <returns></returns>
        List<String> getGrantPermissionCommands();

        /// <summary>
        /// Returns the command used to deny permission.
        /// </summary>
        /// <returns></returns>
        List<String> getDenyPermissionCommands();

        /// <summary>
        /// Returns command-prefix used to invoke a state-change.
        /// </summary>
        /// <returns></returns>
        String getStateChangePrefix();

        /// <summary>
        /// Returns the command-prefix used to invoke a scene-execution.
        /// </summary>
        /// <returns></returns>
        String getScenePrefix();
        #endregion
 
        #region Methods used to access Supplementary TTS Vocabulary
        
        /// <summary>
        /// Returns the TTS String Lisa will say when she returns back to the standby state due to a user command.
        /// </summary>
        /// <returns></returns>
        String getReturnToStandbyOnCommandTTS();
        
        /// <summary>
        /// Returns the TTS String Lisa will say when she returns back to the standby state due to a timeout.
        /// </summary>
        /// <returns></returns>
        
        String getReturnToStandbyOnTimeoutTTS();
        /// <summary>
        /// Returns the phrase which Lisa will use in the TTS Engine to ask for the user's permission.
        /// </summary>
        /// <param name="newStateName">The name of the new state to which Lisa wants to switch needs to
        /// be passed in the parameters so that it can be incorporated into the TTS string.</param>
        /// <returns></returns>
        String getUserPermissionRequiredTTS(String newStateName);
        
        /// <summary>
        /// Returns the TTS String saying that Lisa is currently busy.
        /// </summary>
        /// <returns></returns>
        String getCurrentlyBusyTTS();

        /// <summary>
        /// Returns the TTS String saying that Lisa is currently busy but that there's a new state with a higher
        /// priority that needs to be taken care of.
        /// </summary>
        /// <returns></returns>
        String getCurrentlyBusyButNewStateHigherPriorityTTS();

        /// <summary>
        /// Returns the TTS String saying that Lisa has received the user's permission confirmation.
        /// </summary>
        /// <returns></returns>
        String getPermissionConfirmedTTS();

        /// <summary>
        /// Returns the TTS String saying that Lisa has received the user's permission denial.
        /// </summary>
        /// <returns></returns>
        String getPermissionDeniedTTS();

        /// <summary>
        /// Returns the TTS String saying that the user didn't respond quickly enough in regards to the user-permission request.
        /// </summary>
        /// <returns></returns>
        String getPermissionTimeoutTTS();

        /// <summary>
        /// Returns the TTS String saying that Lisa received a new user command.
        /// </summary>
        /// <returns></returns>
        String getUserCommandReceivedTTS();

        /// <summary>
        /// Returns the TTS String saying that Lisa received a new environment event.
        /// </summary>
        /// <returns></returns>
        String getEnvironmentEventReceivedTTS();
        #endregion
    }
}
